home *** CD-ROM | disk | FTP | other *** search
/ QuickTime 2.0 Developer Kit / QuickTime 2.0 Developer Kit.iso / mac / MAC / Programming Stuff / Interfaces / CIncludes / Lists.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-11-11  |  9.8 KB  |  275 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        Lists.h
  3.  
  4.      Copyright:    © 1984-1994 by Apple Computer, Inc.
  5.                  All rights reserved.
  6.  
  7.      Version:    Universal Interfaces 2.0a3  ETO #16, MPW prerelease.  Friday, November 11, 1994. 
  8.  
  9.      Bugs?:        If you find a problem with this file, send the file and version
  10.                  information (from above) and the problem description to:
  11.  
  12.                      Internet:    apple.bugs@applelink.apple.com
  13.                      AppleLink:    APPLE.BUGS
  14.  
  15. */
  16.  
  17. #ifndef __LISTS__
  18. #define __LISTS__
  19.  
  20.  
  21. #ifndef __TYPES__
  22. #include <Types.h>
  23. #endif
  24. /*    #include <ConditionalMacros.h>                                */
  25.  
  26. #ifndef __CONTROLS__
  27. #include <Controls.h>
  28. #endif
  29. /*    #include <Quickdraw.h>                                        */
  30. /*        #include <MixedMode.h>                                    */
  31. /*        #include <QuickdrawText.h>                                */
  32. /*    #include <Menus.h>                                            */
  33. /*        #include <Memory.h>                                        */
  34. /*        #include <Events.h>                                        */
  35. /*            #include <OSUtils.h>                                */
  36.  
  37. #ifdef __cplusplus
  38. extern "C" {
  39. #endif
  40.  
  41. #if GENERATINGPOWERPC
  42. #pragma options align=mac68k
  43. #endif
  44.  
  45. #ifdef __CFM68K__
  46. #pragma lib_export on
  47. #endif
  48.  
  49.  
  50. enum {
  51.     lDoVAutoscroll                = 2,
  52.     lDoHAutoscroll                = 1,
  53.     lOnlyOne                    = -128,
  54.     lExtendDrag                    = 64,
  55.     lNoDisjoint                    = 32,
  56.     lNoExtend                    = 16,
  57.     lNoRect                        = 8,
  58.     lUseSense                    = 4,
  59.     lNoNilHilite                = 2,
  60.     lInitMsg                    = 0,
  61.     lDrawMsg                    = 1,
  62.     lHiliteMsg                    = 2,
  63.     lCloseMsg                    = 3
  64. };
  65.  
  66. /*
  67.     Set STRICT_LISTS to 1 to make sure your code 
  68.     doesn't access the list records directly
  69. */
  70. #ifndef STRICT_LISTS
  71. #define STRICT_LISTS 0
  72. #endif
  73. #if STRICT_LISTS
  74. typedef struct OpaqueListRef *ListRef;
  75.  
  76. typedef ListRef ListHandle;
  77.  
  78. #else
  79. typedef struct ListRec ListRec, *ListPtr, **ListHandle;
  80.  
  81. typedef ListHandle ListRef;
  82.  
  83. #endif
  84. typedef Point Cell;
  85.  
  86. typedef char DataArray[32001];
  87.  
  88. typedef char *DataPtr, **DataHandle;
  89.  
  90. typedef pascal short (*ListSearchProcPtr)(Ptr aPtr, Ptr bPtr, short aLen, short bLen);
  91. typedef Boolean (*ListClickLoopProcPtr)(void);
  92.  
  93. #if GENERATINGCFM
  94. typedef UniversalProcPtr ListSearchUPP;
  95. typedef UniversalProcPtr ListClickLoopUPP;
  96. #else
  97. typedef ListSearchProcPtr ListSearchUPP;
  98. typedef ListClickLoopProcPtr ListClickLoopUPP;
  99. #endif
  100.  
  101. #if !STRICT_LISTS
  102. struct ListRec {
  103.     Rect                            rView;
  104.     GrafPtr                            port;
  105.     Point                            indent;
  106.     Point                            cellSize;
  107.     Rect                            visible;
  108.     ControlHandle                    vScroll;
  109.     ControlHandle                    hScroll;
  110.     SInt8                            selFlags;
  111.     Boolean                            lActive;
  112.     SInt8                            lReserved;
  113.     SInt8                            listFlags;
  114.     long                            clikTime;
  115.     Point                            clikLoc;
  116.     Point                            mouseLoc;
  117.     ListClickLoopUPP                lClickLoop;
  118.     Cell                            lastClick;
  119.     long                            refCon;
  120.     Handle                            listDefProc;
  121.     Handle                            userHandle;
  122.     Rect                            dataBounds;
  123.     DataHandle                        cells;
  124.     short                            maxIndex;
  125.     short                            cellArray[1];
  126. };
  127. #endif
  128. typedef pascal void (*ListDefProcPtr)(short lMessage, Boolean lSelect, Rect *lRect, Cell lCell, short lDataOffset, short lDataLen, ListHandle lHandle);
  129.  
  130. #if GENERATINGCFM
  131. typedef UniversalProcPtr ListDefUPP;
  132. #else
  133. typedef ListDefProcPtr ListDefUPP;
  134. #endif
  135.  
  136. enum {
  137.     uppListSearchProcInfo = kPascalStackBased
  138.          | RESULT_SIZE(SIZE_CODE(sizeof(short)))
  139.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(Ptr)))
  140.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(Ptr)))
  141.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(short)))
  142.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(short))),
  143.     uppListClickLoopProcInfo = kCStackBased
  144.          | RESULT_SIZE(SIZE_CODE(sizeof(Boolean))),
  145.     uppListDefProcInfo = kPascalStackBased
  146.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(short)))
  147.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(Boolean)))
  148.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(Rect*)))
  149.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(Cell)))
  150.          | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(short)))
  151.          | STACK_ROUTINE_PARAMETER(6, SIZE_CODE(sizeof(short)))
  152.          | STACK_ROUTINE_PARAMETER(7, SIZE_CODE(sizeof(ListHandle)))
  153. };
  154.  
  155. #if GENERATINGCFM
  156. #define NewListSearchProc(userRoutine)        \
  157.         (ListSearchUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppListSearchProcInfo, GetCurrentArchitecture())
  158. #define NewListClickLoopProc(userRoutine)        \
  159.         (ListClickLoopUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppListClickLoopProcInfo, GetCurrentArchitecture())
  160. #define NewListDefProc(userRoutine)        \
  161.         (ListDefUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppListDefProcInfo, GetCurrentArchitecture())
  162. #else
  163. #define NewListSearchProc(userRoutine)        \
  164.         ((ListSearchUPP) (userRoutine))
  165. #define NewListClickLoopProc(userRoutine)        \
  166.         ((ListClickLoopUPP) (userRoutine))
  167. #define NewListDefProc(userRoutine)        \
  168.         ((ListDefUPP) (userRoutine))
  169. #endif
  170.  
  171. #if GENERATINGCFM
  172. #define CallListSearchProc(userRoutine, aPtr, bPtr, aLen, bLen)        \
  173.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppListSearchProcInfo, (aPtr), (bPtr), (aLen), (bLen))
  174. #define CallListClickLoopProc(userRoutine)        \
  175.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppListClickLoopProcInfo)
  176. #define CallListDefProc(userRoutine, lMessage, lSelect, lRect, lCell, lDataOffset, lDataLen, lHandle)        \
  177.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppListDefProcInfo, (lMessage), (lSelect), (lRect), (lCell), (lDataOffset), (lDataLen), (lHandle))
  178. #else
  179. #define CallListSearchProc(userRoutine, aPtr, bPtr, aLen, bLen)        \
  180.         (*(userRoutine))((aPtr), (bPtr), (aLen), (bLen))
  181. #define CallListClickLoopProc(userRoutine)        \
  182.         (*(userRoutine))()
  183. #define CallListDefProc(userRoutine, lMessage, lSelect, lRect, lCell, lDataOffset, lDataLen, lHandle)        \
  184.         (*(userRoutine))((lMessage), (lSelect), (lRect), (lCell), (lDataOffset), (lDataLen), (lHandle))
  185. #endif
  186.  
  187. extern pascal ListHandle LNew(const Rect *rView, const Rect *dataBounds, Point cSize, short theProc, WindowPtr theWindow, Boolean drawIt, Boolean hasGrow, Boolean scrollHoriz, Boolean scrollVert)
  188.  THREEWORDINLINE(0x3F3C, 0x0044, 0xA9E7);
  189. extern pascal void LDispose(ListHandle lHandle)
  190.  THREEWORDINLINE(0x3F3C, 0x0028, 0xA9E7);
  191. extern pascal short LAddColumn(short count, short colNum, ListHandle lHandle)
  192.  THREEWORDINLINE(0x3F3C, 0x0004, 0xA9E7);
  193. extern pascal short LAddRow(short count, short rowNum, ListHandle lHandle)
  194.  THREEWORDINLINE(0x3F3C, 0x0008, 0xA9E7);
  195. extern pascal void LDelColumn(short count, short colNum, ListHandle lHandle)
  196.  THREEWORDINLINE(0x3F3C, 0x0020, 0xA9E7);
  197. extern pascal void LDelRow(short count, short rowNum, ListHandle lHandle)
  198.  THREEWORDINLINE(0x3F3C, 0x0024, 0xA9E7);
  199. extern pascal Boolean LGetSelect(Boolean next, Cell *theCell, ListHandle lHandle)
  200.  THREEWORDINLINE(0x3F3C, 0x003C, 0xA9E7);
  201. extern pascal Cell LLastClick(ListHandle lHandle)
  202.  THREEWORDINLINE(0x3F3C, 0x0040, 0xA9E7);
  203. extern pascal Boolean LNextCell(Boolean hNext, Boolean vNext, Cell *theCell, ListHandle lHandle)
  204.  THREEWORDINLINE(0x3F3C, 0x0048, 0xA9E7);
  205. extern pascal Boolean LSearch(const void *dataPtr, short dataLen, ListSearchUPP searchProc, Cell *theCell, ListHandle lHandle)
  206.  THREEWORDINLINE(0x3F3C, 0x0054, 0xA9E7);
  207. extern pascal void LSize(short listWidth, short listHeight, ListHandle lHandle)
  208.  THREEWORDINLINE(0x3F3C, 0x0060, 0xA9E7);
  209. extern pascal void LSetDrawingMode(Boolean drawIt, ListHandle lHandle)
  210.  THREEWORDINLINE(0x3F3C, 0x002C, 0xA9E7);
  211. extern pascal void LScroll(short dCols, short dRows, ListHandle lHandle)
  212.  THREEWORDINLINE(0x3F3C, 0x0050, 0xA9E7);
  213. extern pascal void LAutoScroll(ListHandle lHandle)
  214.  THREEWORDINLINE(0x3F3C, 0x0010, 0xA9E7);
  215. extern pascal void LUpdate(RgnHandle theRgn, ListHandle lHandle)
  216.  THREEWORDINLINE(0x3F3C, 0x0064, 0xA9E7);
  217. extern pascal void LActivate(Boolean act, ListHandle lHandle)
  218.  TWOWORDINLINE(0x4267, 0xA9E7);
  219. extern pascal void LCellSize(Point cSize, ListHandle lHandle)
  220.  THREEWORDINLINE(0x3F3C, 0x0014, 0xA9E7);
  221. extern pascal Boolean LClick(Point pt, short modifiers, ListHandle lHandle)
  222.  THREEWORDINLINE(0x3F3C, 0x0018, 0xA9E7);
  223. extern pascal void LAddToCell(const void *dataPtr, short dataLen, Cell theCell, ListHandle lHandle)
  224.  THREEWORDINLINE(0x3F3C, 0x000C, 0xA9E7);
  225. extern pascal void LClrCell(Cell theCell, ListHandle lHandle)
  226.  THREEWORDINLINE(0x3F3C, 0x001C, 0xA9E7);
  227. extern pascal void LGetCell(void *dataPtr, short *dataLen, Cell theCell, ListHandle lHandle)
  228.  THREEWORDINLINE(0x3F3C, 0x0038, 0xA9E7);
  229. extern pascal void LGetCellDataLocation(short *offset, short *len, Cell theCell, ListHandle lHandle)
  230.  THREEWORDINLINE(0x3F3C, 0x0034, 0xA9E7);
  231. extern pascal void LRect(Rect *cellRect, Cell theCell, ListHandle lHandle)
  232.  THREEWORDINLINE(0x3F3C, 0x004C, 0xA9E7);
  233. extern pascal void LSetCell(const void *dataPtr, short dataLen, Cell theCell, ListHandle lHandle)
  234.  THREEWORDINLINE(0x3F3C, 0x0058, 0xA9E7);
  235. extern pascal void LSetSelect(Boolean setIt, Cell theCell, ListHandle lHandle)
  236.  THREEWORDINLINE(0x3F3C, 0x005C, 0xA9E7);
  237. extern pascal void LDraw(Cell theCell, ListHandle lHandle)
  238.  THREEWORDINLINE(0x3F3C, 0x0030, 0xA9E7);
  239. #if CGLUESUPPORTED
  240. extern void laddtocell(Ptr dataPtr, short dataLen, Cell *theCell, ListHandle lHandle);
  241. extern void lclrcell(Cell *theCell, ListHandle lHandle);
  242. extern void lgetcelldatalocation(short *offset, short *len, Cell *theCell, ListHandle lHandle);
  243. extern void lgetcell(Ptr dataPtr, short *dataLen, Cell *theCell, ListHandle lHandle);
  244. extern ListHandle lnew(Rect *rView, Rect *dataBounds, Point *cSize, short theProc, WindowPtr theWindow, Boolean drawIt, Boolean HasGrow, Boolean ScrollHoriz, Boolean ScrollVert);
  245. extern void lrect(Rect *cellRect, Cell *theCell, ListHandle lHandle);
  246. extern void lsetcell(Ptr dataPtr, short dataLen, Cell *theCell, ListHandle lHandle);
  247. extern void lsetselect(Boolean setIt, Cell *theCell, ListHandle lHandle);
  248. extern void ldraw(Cell *theCell, ListHandle lHandle);
  249. extern Boolean lclick(Point *pt, short modifiers, ListHandle lHandle);
  250. extern void lcellsize(Point *cSize, ListHandle lHandle);
  251. #endif
  252. #if OLDROUTINENAMES
  253. #define LDoDraw(drawIt, lHandle) LSetDrawingMode(drawIt, lHandle)
  254. #define LFind(offset, len, theCell, lHandle)  \
  255.     LGetCellDataLocation(offset, len, theCell, lHandle)
  256. #if CGLUESUPPORTED
  257. #define lfind(offset, len, theCell, lHandle)  \
  258.     lgetcelldatalocation(offset, len, theCell, lHandle)
  259. #endif
  260. #endif
  261.  
  262. #ifdef __CFM68K__
  263. #pragma lib_export off
  264. #endif
  265.  
  266. #if GENERATINGPOWERPC
  267. #pragma options align=reset
  268. #endif
  269.  
  270. #ifdef __cplusplus
  271. }
  272. #endif
  273.  
  274. #endif /* __LISTS__ */
  275.